# encoding:utf-8
import json
import random
import re
import sys
import time
import pandas as pd
import requests
from tqdm import tqdm
from utils.resolove import *
from utils.crawlfundinfo import *
from utils.crawlposition import *
#from ua import get_ua
from fake_useragent import UserAgent
ua = UserAgent()
# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)

def get_rank_data(url, page_index, max_page, fund_type):
    """
    根据起始页码获取当前页面的所有基金情况
    :return:
    """
    try_cnt = 0
    rank_data = []
    # 若当前页其实页码小于总页数 或者 超时3次 则退出
    print("开始爬取基金数据...")
    pbar = tqdm(total = max_page-1)
    while page_index<max_page and try_cnt<3:
        # 根据每页数据条数确定起始下标
        new_url = url + '?ft=' + fund_type + '&sc=1n&st=desc&pi=' + str(page_index) + '&pn=5&fl=0&isab=1'
        # 爬取当前页码的数据
        response = requests.get(url=new_url, headers={'User-Agent': ua.random}, timeout=10)
        if len(response.text) > 100:
            # 匹配数据并解析
            res_data = re.findall("\[{1}\S+\]{1}", response.text)[0]
            # 解析单页数据
            rank_pages_data = resolve_rank_info(res_data)
            rank_data.extend(rank_page_data for rank_page_data in rank_pages_data)
        else:
            try_cnt += 1
        page_index += 1
        pbar.update(1)
        # 随机休眠3-5 秒
        time.sleep(random.randint(3, 5))
    pbar.close()
    df_rank_data = pd.DataFrame(rank_data)
    print("基金的数据爬取完成!")
    return df_rank_data